RaisedError:='factor in binom results to infinity';
binom:=0;
exit;
end;
Binom:=_1Fact/(_2Fact*_3Fact);
end;
{----------------------}
var
g, d : extended;
begin
try
Evaluation:=0;
if CalcError=true then exit;
if Expression^.Contents='=' then Evaluation:=Evaluation(Expression^.Child(0)) else
if Expression^.NodeType = NodeValue then Evaluation := Expression^.NodeContents^.MyValue else
if Expression^.NodeType = NodeVariable then Evaluation := VariableValue(Expression^.NodeContents^.MyVariable) else
if Expression^.NodeType = NodeSingle then begin
g := Evaluation(Expression^.Child(0));
if Expression.NodeContents.MySingle[1]='-' then begin
Delete(Expression.NodeContents.MySingle,1,1);
NextInteger:=-1
end else NextInteger:=1;
if CompareText(Expression^.NodeContents^.MySingle,'binom')=0 then Evaluation:=NextInteger*Binom(g,Evaluation(Expression^.Child(1))) else
if CompareText(Expression^.NodeContents^.MySingle,'perfect')=0 then Evaluation:=NextInteger*Perfect(g) else
if CompareText(Expression^.NodeContents^.MySingle,'mersgen')=0 then Evaluation:=NextInteger*PMersienne(g) else
if CompareText(Expression^.NodeContents^.MySingle,'genmers')=0 then Evaluation:=NextInteger*MersienneP(g) else
if CompareText(Expression^.NodeContents^.MySingle,'mersienne')=0 then Evaluation:=NextInteger*MersienneN(g) else
if CompareText(Expression^.NodeContents^.MySingle,'mersiennegen')=0 then Evaluation:=NextInteger*MersienneG(g) else
(* if CompareText(Expression^.NodeContents^.MySingle,'primec')=0 then Evaluation:=NextInteger*MyPrimec(g) else
if CompareText(Expression^.NodeContents^.MySingle,'prime')=0 then Evaluation:=NextInteger*MyPrime(g) else
if CompareText(Expression^.NodeContents^.MySingle,'primen')=0 then Evaluation:=NextInteger*MyPrimen(g) else*)
{sin} if CompareText(Expression^.NodeContents^.MySingle,'sin')=0 then Evaluation:=NextInteger*MySin(g) else
if CompareText(Expression^.NodeContents^.MySingle,'arcsin')=0 then Evaluation:=NextInteger*MyArcSin(g) else
if CompareText(Expression^.NodeContents^.MySingle,'sinh')=0 then Evaluation:=NextInteger*Sinh(g) else {(exp(g)-exp(-g))/2}
if CompareText(Expression^.NodeContents^.MySingle,'arcsinh')=0 then Evaluation:=NextInteger*ArcSinh(g) else
{cos} if CompareText(Expression^.NodeContents^.MySingle,'cos')=0 then Evaluation:=NextInteger*MyCos(g) else
if CompareText(Expression^.NodeContents^.MySingle,'arccos')=0 then Evaluation:=NextInteger*MyArcCos(g) else
if CompareText(Expression^.NodeContents^.MySingle,'cosh')=0 then Evaluation:= NextInteger*cosh(g){(exp(g)+exp(-g))/2} else
if CompareText(Expression^.NodeContents^.MySingle,'arccosh')=0 then Evaluation:=NextInteger*MyArcCosh(g) else
{tan} if CompareText(Expression^.NodeContents^.MySingle,'tan')=0 then Evaluation:=NextInteger*MyTan(g) else
if CompareText(Expression^.NodeContents^.MySingle,'arctan')=0 then Evaluation:=NextInteger*MyArcTan(g) else
if CompareText(Expression^.NodeContents^.MySingle,'tanh')=0 then Evaluation:=NextInteger*tanh(g) else {Evaluation:=(exp(g)-exp(-g))/(exp(g)+exp(-g)); {tanh has R for domain}
if CompareText(Expression^.NodeContents^.MySingle,'arctanh')=0 then Evaluation:=NextInteger*MyArcTanh(g) else
{cot} if CompareText(Expression^.NodeContents^.MySingle,'cot')=0 then Evaluation:=NextInteger*MyCot(g) else
if CompareText(Expression^.NodeContents^.MySingle,'coth')=0 then Evaluation:=NextInteger*coth(g) else
if (CompareText(Expression^.NodeContents^.MySingle,'arccot')=0) then Evaluation:=NextInteger*arccot(g) else
if (CompareText(Expression^.NodeContents^.MySingle,'arccoth')=0) then Evaluation:=NextInteger*arccoth(g) else
{sec} if CompareText(Expression^.NodeContents^.MySingle,'sec')=0 then Evaluation:=NextInteger*Sec(g) else
if (CompareText(Expression^.NodeContents^.MySingle,'arcsec')=0) then Evaluation:=NextInteger*arcsec(g) else
if CompareText(Expression^.NodeContents^.MySingle,'sech')=0 then Evaluation:=NextInteger*MySech(g) else
if (CompareText(Expression^.NodeContents^.MySingle,'arcsech')=0) then Evaluation:=NextInteger*arcsech(g) else
{csc} if CompareText(Expression^.NodeContents^.MySingle,'csc')=0 then Evaluation:=NextInteger*MyCsc(g) else
if (CompareText(Expression^.NodeContents^.MySingle,'arccsc')=0) then Evaluation:=NextInteger*arccsc(g) else
if CompareText(Expression^.NodeContents^.MySingle,'csch')=0 then Evaluation:=NextInteger*MyCsch(g) else
if (CompareText(Expression^.NodeContents^.MySingle,'arccsch')=0) then Evaluation:=NextInteger*arccsch(g) else
{etc} if CompareText(Expression^.NodeContents^.MySingle,'new')=0 then Evaluation:=NextInteger*g else
if CompareText(Expression^.NodeContents^.MySingle,'random')=0 then Evaluation:=NextInteger*MyRandom(g) else
if CompareText(Expression^.NodeContents^.MySingle,'sqr')=0 then Evaluation:= NextInteger*sqr(g) else
if CompareText(Expression^.NodeContents^.MySingle,'sqrt')=0 then Evaluation:= NextInteger*MySqrt(g) else
if CompareText(Expression^.NodeContents^.MySingle,'floor')=0 then Evaluation:=NextInteger*floor(g) else
if CompareText(Expression^.NodeContents^.MySingle,'ceil')=0 then Evaluation:=NextInteger*ceil(g) else
if CompareText(Expression^.NodeContents^.MySingle,'ln')=0 then Evaluation:=NextInteger*MyLn(g) else
if CompareText(Expression^.NodeContents^.MySingle,'exp')=0 then Evaluation:= NextInteger*exp(g) else
if CompareText(Expression^.NodeContents^.MySingle,'logn')=0 then Evaluation:=NextInteger*logn(g,Evaluation(Expression^.Child(1))) else
if CompareText(Expression^.NodeContents^.MySingle,'log')=0 then Evaluation:=NextInteger*MyLog(g) else
if CompareText(Expression^.NodeContents^.MySingle,'trunc')=0 then Evaluation:= NextInteger*trunc(g) else
if CompareText(Expression^.NodeContents^.MySingle,'round')=0 then Evaluation:= NextInteger*round(g) else
if CompareText(Expression^.NodeContents^.MySingle,'int')=0 then Evaluation:= NextInteger*int(g) else
if CompareText(Expression^.NodeContents^.MySingle,'abs')=0 then Evaluation:= NextInteger*abs(g) else
if CompareText(Expression^.NodeContents^.MySingle,'frac')=0 then Evaluation:= NextInteger*(g-trunc(g)) else
if CompareText(Expression^.NodeContents^.MySingle,'not')=0 then Evaluation:=NextInteger*MyNot(g) else
(*if CompareText(Expression^.NodeContents^.MySingle,'eind')=0 then Evaluation:=NextInteger*eInd(g) else*)
(*if CompareText(Expression^.NodeContents^.MySingle,'phi')=0 then Evaluation:=NextInteger*eInd(g) else*)
if CompareText(Expression^.NodeContents^.MySingle,'max')=0 then Evaluation:=NextInteger*MyMax(g) else
if CompareText(Expression^.NodeContents^.MySingle,'min')=0 then Evaluation:=NextInteger*MyMin(g) else
if CompareText(Expression^.NodeContents^.MySingle,'average')=0 then Evaluation:=NextInteger*MyAverage(g) else
if CompareText(Expression^.NodeContents^.MySingle,'shl')=0 then Evaluation:=MyShl(g,Evaluation(Expression^.Child(1))) else
if CompareText(Expression^.NodeContents^.MySingle,'shr')=0 then Evaluation:=MyShr(g,Evaluation(Expression^.Child(1))) else
if CompareText(Expression^.NodeContents^.MySingle,'beta')=0 then Evaluation:=NextInteger*beta(g,Evaluation(Expression^.Child(1)),Evaluation(Expression^.Child(2))) else
if CompareText(Expression^.NodeContents^.MySingle,'gamma')=0 then Evaluation:=NextInteger*Gamma(g,Evaluation(Expression^.Child(1))) else
if CompareText(Expression^.NodeContents^.MySingle,'fib')=0 then begin